无文件恶意软件怎么取证
使用命令行进行攻击取证:
bindshell启动后会立即绑定到TCP 31337端口,执行反弹shell操作,开始发送盗取的敏感数据等。可以先使用netstat和ps命令收集攻击信息。
通过netstat命令,我们注意到了一个反常的tcp端口,该端口的进程名也很奇怪:
netstat -nalp
如上图所示,该进程的PID为14667。下一步通过PS命令查看该进程一些具体信息:
ps -auxw
我们在进程列表中,看到它的进程名为[kwerker/0:sandfly],这将帮助它隐藏在具有相似名称的合法进程中。您可以在上面的列表中看到,如果不使用sandfly标识符进行命名,真的很难发现它。
现在已经找到了可疑进程,下一步就要想办法获取该进程的具体信息。由于接下来大多数操作将在/proc目录中进行,先转到/proc/目录,其中PID是可疑进程ID。可以使用以下命令进入该目录:
cd / proc / 14667
在进程目录中,可以使用ls命令列出文件夹中的内容。Linux内核将实时构建目录,显示许多有价值的信息。
ls -al
通过简单的ls命令我们可以获知:1.进程启动时的日期戳。2.当前的工作目录(用户最有可能在/root下启动进程)。3.EXE链接指向一个已删除的二进制文件的位置。
最重要的一点是,在Linux上,除了少数用例外,具有deleted标记的二进制文件的进程通常是恶意的。而且,该进程不仅被删除,还指向一个非常不寻常的位置了/memfd:这是攻击所使用的内存文件描述符。
使用Comm和Cmdline参数查找隐藏的Linux进程
在/ proc目录下的comm和cmdline文件会记录进程的命令名和进程的完整命令行信息,这是一个很好的切入点。
当启动进程时含有参数时,会在各个参数中使用字符’’进行分割。所以当使用cat命令查看cmdline文件内容时,只能打印出第一个参数,即进程名。所以可以使用cat命令查看comm文件,使用strings命令来查看cmdline文件。
cat commstrings cmdline
comm和cmdline文件显示以下内容:
在在Linux中,大多数情况下,文件应当显示一个基本上相互匹配的二进制名称。例如,如果您在nginx这样的web服务器上运行此程序,您将在这两个文件中的某个位置看到nginx名称。但是在这个示例中,comm文件中只是一个数字“3”,这是进程伪装的一种手段。同样,cmdline文件夹中的内容也很奇怪。这两个文件并未正确记录进程名称。
通过进程映射来验证二进制名称
/proc/[pid]/maps文件可以显示进程的内存区域映射信息。在这里也可以找到二进制名称,以及运行时正在使用的其他库文件。通常,该文件的第一部分包含对正在运行的二进制文件的引用(例如/usr/bin/vi)。但是在文件中,我们再一次看到了对/memfd: (deleted)的奇怪引用。
cat maps
调查Linux进程环境
很多人可能会忽略在Linux上,当你启动一个进程时,它通常会附加一系列环境变量。在大多数情况下,由用户启动的任何进程都会出现在这里。我们试图通过查看/proc//environ文件夹获取进程信息。
同样,出于格式化的原因,我们将使用strings命令,这样更易于阅读。strings environ
恶意软件是通过SSH传入的,纵使攻击者设法清理的有关IP地址的日志,但是启动进程时还是会留下蛛丝马迹。
抓取二进制文件
即便二进制文件没有在磁盘上存在,仍可以非常便捷的恢复注入的二进制文件。
cp /proc//exe /destination_dir/filename在本示例中,命令如下:cp exe /tmp/malware.recovered
该文件被恢复到/tmp/malware.recovered下。可以像往常一样对恶意样本进行分析,还可以为二进制文件生成hash值:sha1sum exesha1sum /tmp/malware.recovered
收集到的信息
到目前为止,我们收集到了如下信息:
1.可疑的可执行文件的路径。
2.进程使用的端口号。
3.进程名。
4.comm和cmdline文件中没有引用相同的命令名。
5.comm文件内容只有一个字符长。
6.进程当前的工作目录位于/ root下。
7.进程试图链接已被删除的/memfd位置,而不是合法的二进制路径。
8.进程映射文件显示相同的已删除位置。
9.恶意软件是通过SSH传入的